package com.apikey.auth.service;

import com.apikey.auth.entity.OperationHistory;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

/**
 * 操作历史服务接口
 * 提供操作历史的管理功能
 *
 * @author API Key Framework
 * @version 1.0
 */
public interface OperationHistoryService {

    /**
     * 保存操作历史
     *
     * @param operationHistory 操作历史
     * @return 保存的操作历史
     */
    OperationHistory save(OperationHistory operationHistory);

    /**
     * 记录操作历史
     *
     * @param apiKeyId      API Key ID
     * @param operationType 操作类型
     * @param operatorId    操作员ID
     * @param description   描述
     * @return 操作历史
     */
    OperationHistory recordOperation(Long apiKeyId, String operationType, String operatorId, String description);

    /**
     * 记录操作历史（包含旧值和新值）
     *
     * @param apiKeyId      API Key ID
     * @param operationType 操作类型
     * @param operatorId    操作员ID
     * @param description   描述
     * @param oldValue      旧值
     * @param newValue      新值
     * @return 操作历史
     */
    OperationHistory recordOperation(Long apiKeyId, String operationType, String operatorId,
                                     String description, String oldValue, String newValue);

    /**
     * 根据API Key ID查找操作历史
     *
     * @param apiKeyId API Key ID
     * @param pageable 分页参数
     * @return 操作历史分页列表
     */
    Page<OperationHistory> findByApiKeyId(Long apiKeyId, Pageable pageable);

    /**
     * 根据操作员ID查找操作历史
     *
     * @param operatorId 操作员ID
     * @param pageable   分页参数
     * @return 操作历史分页列表
     */
    Page<OperationHistory> findByOperatorId(String operatorId, Pageable pageable);

    /**
     * 根据操作类型查找操作历史
     *
     * @param operationType 操作类型
     * @param pageable      分页参数
     * @return 操作历史分页列表
     */
    Page<OperationHistory> findByOperationType(String operationType, Pageable pageable);

    /**
     * 查找所有操作历史
     *
     * @param pageable 分页参数
     * @return 操作历史分页列表
     */
    Page<OperationHistory> findAll(Pageable pageable);

    /**
     * 删除指定天数之前的操作历史
     *
     * @param days 天数
     * @return 删除的记录数
     */
    int deleteOldRecords(int days);
}